package com.fl.niu.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.fl.niu.dto.AdminParam;
import com.fl.niu.dto.UpdateAdminPasswordParam;
import com.fl.niu.model.Admin;
import com.fl.niu.model.AdminPermission;
import com.fl.niu.model.AdminRole;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.List;

/**
 * 后台管理员Service
 * @author qj
 */
public interface AdminService extends IService<Admin> {
    /**
     * 根据用户名获取后台管理员
     * @param username
     * @return
     */
    Admin getAdminByUsername(String username);

    /**
     * 注册功能
     * @param umsAdminParam
     * @return
     */
    Admin register(AdminParam umsAdminParam);

    /**
     * 登录功能
     * @param username 用户名
     * @param password 密码
     * @return 生成的JWT的token
     */
    String login(String username, String password);

    /**
     * 刷新token的功能
     * @param oldToken
     * @return
     */
    String refreshToken(String oldToken);
    /**
     * 根据用户id获取用户
     * @param id
     * @return
     */
    Admin getItem(Long id);
    /**
     * 根据用户名或昵称分页查询用户
     * @param keyword
     * @param pageSize
     * @param pageNum
     * @return
     */
    List<Admin> list(String keyword, Integer pageSize, Integer pageNum);

    /**
     * 修改指定用户信息
     * @param id
     * @param admin
     * @return
     */
    int update(Long id, Admin admin);

    /**
     * 删除指定用户
     * @param id
     * @return
     */
    int delete(Long id);

    /**
     * 修改用户角色关系
     * @param adminId
     * @param roleIds
     * @return
     */
    int updateRole(Long adminId, List<Long> roleIds);

    /**
     * 获取用户对于角色
     * @param adminId
     * @return
     */
    List<AdminRole> getRoleList(Long adminId);

    /**
     * 修改用户的+-权限
     * @param adminId
     * @param permissionIds
     * @return
     */
    int updatePermission(Long adminId, List<Long> permissionIds);

    /**
     * 获取用户所有权限（包括角色权限和+-权限）
     * @param adminId
     * @return
     */
    List<AdminPermission> getPermissionList(Long adminId);
    /**
     * 修改密码
     * @param updatePasswordParam
     * @return
     */
    int updatePassword(UpdateAdminPasswordParam updatePasswordParam);
    /**
     * 获取用户信息
     * @param username
     * @return
     */
    UserDetails loadUserByUsername(String username);
}
